"""
进程间通信-控制
- 需求：我们启动两个进程，一个输出Ping，一个输出Pong，两个进程输出的Ping和Pong加起来一共10个。
  使用multiprocessing模块中的Queue类，来控制counter变量的增加

Version: 0.1
Author: yuwl
Date：2024-4-9
"""

from multiprocessing import Process, Queue
import time

def sub_task(string, queue):
    while True:
        # 获取队列中的计数器值
        counter = queue.get()
        # 如果计数器值达到10，则退出循环
        if counter >= 10:
            break
        # 打印字符串并更新计数器
        print(string, end='', flush=True)
        # 将更新后的计数器值放回队列
        queue.put(counter + 1)

def main():
    # 创建一个队列，用于进程间通信
    queue = Queue()
    # 将初始计数器值放入队列
    queue.put(0)
    # 创建并启动两个子进程
    p1 = Process(target=sub_task, args=('Ping', queue))
    p2 = Process(target=sub_task, args=('Pong', queue))
    p1.start()
    p2.start()
    # 等待两个子进程完成
    p1.join()
    p2.join()


if __name__ == '__main__':
    main()